/**
 * 全局审核通知管理器
 * 提供定时轮询检查、页面切换检查等功能
 */

import NotificationUtils from './notification.js'

class GlobalNotificationManager {
  constructor() {
    this.pollingTimer = null
    this.pollingInterval = 5 * 60 * 1000 // 5分钟检查一次
    this.isPolling = false
    this.lastCheckTime = 0
    this.minCheckInterval = 30 * 1000 // 最小检查间隔30秒，避免频繁请求
  }

  /**
   * 启动全局轮询检查
   * @param {number} interval 轮询间隔（毫秒），默认5分钟
   */
  startPolling(interval = this.pollingInterval) {
    if (this.isPolling) {
      console.log('📡 审核通知轮询已在运行中')
      return
    }

    this.pollingInterval = interval
    this.isPolling = true

    console.log(`📡 启动审核通知轮询检查，间隔: ${interval / 1000}秒`)

    // 立即执行一次检查
    this.performCheck('轮询启动')

    // 设置定时器
    this.pollingTimer = setInterval(() => {
      this.performCheck('定时轮询')
    }, this.pollingInterval)
  }

  /**
   * 停止全局轮询检查
   */
  stopPolling() {
    if (!this.isPolling) {
      return
    }

    console.log('📡 停止审核通知轮询检查')

    if (this.pollingTimer) {
      clearInterval(this.pollingTimer)
      this.pollingTimer = null
    }

    this.isPolling = false
  }

  /**
   * 手动触发检查（带防抖）
   * @param {string} trigger 触发来源
   */
  async triggerCheck(trigger = '手动触发') {
    const now = Date.now()
    if (now - this.lastCheckTime < this.minCheckInterval) {
      console.log(`⏰ 距离上次检查时间过短，跳过检查 (${trigger})`)
      return
    }

    await this.performCheck(trigger)
  }

  /**
   * 执行实际的检查逻辑
   * @param {string} trigger 触发来源
   */
  async performCheck(trigger) {
    try {
      // 检查uni是否可用
      if (typeof uni === 'undefined') {
        console.log(`⚠️ uni对象不可用，跳过检查 (${trigger})`)
        return
      }

      const token = uni.getStorageSync('token')
      if (!token) {
        console.log(`🔒 用户未登录，跳过审核通知检查 (${trigger})`)
        return
      }

      console.log(`🔍 执行审核通知检查 (${trigger})`)
      this.lastCheckTime = Date.now()

      await NotificationUtils.checkAuditResults()

    } catch (error) {
      console.log(`❌ 审核通知检查失败 (${trigger}):`, error)
    }
  }

  /**
   * 页面显示时的检查
   */
  async onPageShow(pageName) {
    console.log(`📱 页面显示: ${pageName}`)
    await this.triggerCheck(`页面显示:${pageName}`)
  }

  /**
   * 页面隐藏时的处理
   */
  onPageHide(pageName) {
    console.log(`📱 页面隐藏: ${pageName}`)
    // 页面隐藏时可以考虑降低检查频率
  }

  /**
   * 应用进入前台时的检查
   */
  async onAppShow() {
    console.log('📱 应用进入前台')
    await this.triggerCheck('应用前台')
  }

  /**
   * 应用进入后台时的处理
   */
  onAppHide() {
    console.log('📱 应用进入后台')
    // 可以考虑停止轮询以节省资源
    // this.stopPolling()
  }

  /**
   * 用户登录后的初始化
   */
  async onUserLogin() {
    console.log('👤 用户登录，初始化审核通知检查')
    await this.triggerCheck('用户登录')
    
    // 如果还没有开始轮询，则启动
    if (!this.isPolling) {
      this.startPolling()
    }
  }

  /**
   * 用户登出后的清理
   */
  onUserLogout() {
    console.log('👤 用户登出，停止审核通知检查')
    this.stopPolling()
  }

  /**
   * 获取当前状态
   */
  getStatus() {
    return {
      isPolling: this.isPolling,
      pollingInterval: this.pollingInterval,
      lastCheckTime: this.lastCheckTime,
      timeSinceLastCheck: Date.now() - this.lastCheckTime
    }
  }

  /**
   * 更新轮询间隔
   * @param {number} interval 新的间隔时间（毫秒）
   */
  updatePollingInterval(interval) {
    this.pollingInterval = interval
    
    if (this.isPolling) {
      console.log(`📡 更新轮询间隔为: ${interval / 1000}秒，重启轮询`)
      this.stopPolling()
      this.startPolling(interval)
    }
  }
}

// 创建全局单例
const globalNotificationManager = new GlobalNotificationManager()

// 应用生命周期监听会在App.vue中手动调用，不在这里自动注册
// 避免getApp()可能返回undefined的问题

export default globalNotificationManager